package pl.edu.pk.psb.bc.dao;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pl.edu.pk.psb.bc.ds.CenaDs;
import pl.edu.pk.psb.bc.ds.OdlegloscDs;
import pl.edu.pk.psb.bc.ds.PrzystanekDs;

@Repository
public class CenaDaoImpl extends GenericDaoImpl<CenaDs> implements CenaDao {

	@Autowired
	private SessionFactory sessionFactory;

	public CenaDaoImpl() {
		super(CenaDs.class);
	}

	@Override
	public CenaDs pobierzCene(int idPrzystPocz, int idPrzystKonc) {
		String query = "from CenaDs as c where (c.przystanekPocz.id=:idK and c.przystanekKonc.id=:idP) or (c.przystanekPocz.id=:idP and c.przystanekKonc.id=:idK)";
		Query q = sessionFactory.getCurrentSession().createQuery(query);
		q.setParameter("idP", idPrzystPocz);
		q.setParameter("idK", idPrzystKonc);
		List<CenaDs> cennik = q.list();
		CenaDs cena = null;
		if (cennik.size() > 0) {
			cena = cennik.get(0);
		}
		return cena;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<CenaDs> pobierzPowiazanePrzystanki(int idPrzystanku) {
		String query = "from CenaDs as c where c.przystanekPocz.id="+ idPrzystanku + "or c.przystanekKonc.id=" + idPrzystanku;
		Query q = sessionFactory.getCurrentSession().createQuery(query);
		Set<CenaDs> set = new HashSet<CenaDs>(q.list());
		for(CenaDs ds: set){
			if(ds.getPrzystanekKonc().getId()==idPrzystanku){
				PrzystanekDs temp = new PrzystanekDs();
				PrzystanekDs p = ds.getPrzystanekPocz();
				temp.setId(p.getId());
				temp.setIdMiasta(p.getIdMiasta());
				temp.setNazwa(p.getNazwa());
				temp.setRodzajPrzystanku(p.getRodzajPrzystanku());
				ds.setPrzystanekPocz(ds.getPrzystanekKonc());
				ds.setPrzystanekKonc(temp);
			}
		}
		return new ArrayList<CenaDs>(set);
	}

	@Override
	public void zapisz(Set<CenaDs> cennik) {
		if (cennik.size() > 0) {
			for (CenaDs c : cennik)
				super.zapisz(c);
		}
	}

}